var fs = require('fs')
var path = require('path');

function findLargest(dir,cb) {
    // 读取目录下的所有文件
    fs.readdir(dir, function(er,files) {
        if(er) return cb(er);

        var counter = files.length;
        var errored = false;
        var  stats = [];

        files.forEach( function(file, index) {
            // 读取文件信息
            fs.stat(path.join(dir,file), function (er, stat) {

                if(errored) return;

                if(er) {
                    errored = true;
                    return cb(er);
                }

                stats[index] = stat;

                //事先算好有多少个文件，读完一个文件信息，计算减 1，当为 0 时，计算完毕，此时执行最终比较操作。
                if (--counter == 0) {

                    var largest = stats
                    .filter(function(stat) { return stat.isFile() })
                    .reduce(function(prev,next) {
                        if(prev.size > next.size) return prev
                        return next
                    })

                    cb(null,files[stats.indexOf(largest)])
                }
            })
        })
    })
}

findLargest('./', function(er,filename) {
    if(er) return console.error(er)
    console.log('largeest file was', filename)
})
